package com.study.service;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * @author MI
 * @version 1.0
 * @date 2020/10/18 21:47
 */
@Service
@Slf4j
public class OrderServiceImpl3 {

    //blockHandler 定义当资源内部发生了  blockException应该进入的方法，捕获的是sentinel定义的异常
    //fallback     定义当资源内部发生了 Throwable应该进入的方法
    @SentinelResource(value = "message",
            blockHandler = "blockHandler",
            fallback = "fallback"
    )
    public String msg(String name) {
        return "msg";
    }

    //当前方法返回值和原方法一致，但是允许在参数列表最后一个参数加入一个参数 BlockException，用来接收原方法的异常
    public String blockHandler(String name, BlockException e) {
        //自定义异常处理逻辑
        log.info("触发了 blockHandler");
        return "blockHandler";
    }

    //当前方法返回值和原方法一致，但是允许在参数列表最后一个参数加入一个参数 BlockException，用来接收原方法的异常
    public String fallback(String name, BlockException e) {
        //自定义异常处理逻辑
        log.info("触发了 fallback");
        return "fallback";
    }
}
